package com.epam.iunna.bookshop.controller.application;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import javax.servlet.http.HttpServlet;

import com.epam.iunna.bookshop.controller.application.utils.AppUtils;
import com.epam.iunna.bookshop.controller.utils.XmlConfig;

/**
 *Класс приложения. 
 *
 */
public final class App {
    /**
     * Конструктор.
     */
    private App() {
        
    }
    /**
     *Отображение XML файла с настройками. 
     */
    public static XmlConfig config = null;
    /**
     * Сервлет инициализации.
     */
    public static HttpServlet initServlet = null;
    /**
     * Путь к приложению.
     */
    public static File path = null;
   
    
    /**
     * имя приложения.
     */
    public static String name = null;
    
    
    /**
     * инициализирует приложение.
     * Загружает файл конфигурации,присваивает имя приложению,
     * устанавливает рабочую область, размещает ресурсы.
     * @param initSrvlt сервлет инициализации.
     * @param appName имя приложения.
     * @param configName путь к файлу конфигурации.
     * @param appPath путь к приложению
     */
    public static void init(final HttpServlet initSrvlt, final String appName,
            final String configName, final String appPath) {
        try {
            name = appName; // имя приложения
            initServlet = initSrvlt; //сервлет инициализации
            path = new File(appPath); //путь к приложению
            path = path.getCanonicalFile(); // представляем путь к файлу как абсолютный
            File f = new File(configName); // путь к файлу конфига
            f = f.getCanonicalFile(); // представляем путь к файлу как абсолютный
            if (!f.exists()) { // если конфиг не существует
                AppUtils.installConfig(f); // устанавливаем его(копируем)
            }
            f = new File(f + "/config.xml"); // полный путь к файлу конфига

            config = new XmlConfig(f); // создаем обьект предоставляющий методы для работы с конфигом

        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("App " + name + " start at " + new Date());

    }
}
